/**
 * Copyright (C), 2015-2018, XXX有限公司
 * FileName: DataSourceContextHolder
 * Author:   zhouheng
 * Date:     2018/6/20 20:51
 * Description: 数据源上下文
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.hengby.hengcrud.config.mutidatasource;

import java.util.ArrayList;
import java.util.List;

/**
 * 〈一句话功能简述〉<br> 
 * 〈数据源上下文〉
 *
 * @author zhouheng
 * @create 2018/6/20
 * @since 1.0.0
 */
public class DataSourceContextHolder {

    /*

     * 当使用ThreadLocal维护变量时，ThreadLocal为每个使用该变量的线程提供独立的变量副本，

     * 所以每一个线程都可以独立地改变自己的副本，而不会影响其它线程所对应的副本。

     */
    public static ThreadLocal<String> threadLocal = new ThreadLocal<>();

    /*

     * 管理所有的数据源id;

     * 主要是为了判断数据源是否存在;

     */
    public static List<String> dataSourceIds = new ArrayList<String>();

    // 设置数据源类型
    public static void setDataSource(String type){
        threadLocal.set(type);
    }

    // 获取数据源更具数据源类型
    public static String getDataSourceType(){
        return threadLocal.get();
    }

    // 清除数据源
    public static void clear(){
        threadLocal.remove();
    }

    /**
     * 判断指定DataSrouce当前是否存在
     * @param dataSourceId
     * @return
     * @author SHANHY
     * @create  2016年1月24日
     */
    public static boolean containsDataSource(String dataSourceId){

        return dataSourceIds.contains(dataSourceId);

    }

}